home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / shell / digital / src / digital.c next >
Text File  |  1995-06-08  |  4KB  |  195 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <egb.h>
  9. #include <guidbg.h>
  10.  
  11. #include <time.h>
  12. #include <kh.h>
  13. #include <dlib.h>
  14.  
  15. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  16.  
  17. int    dialogID = -1 ;
  18. int    numberIconID[5] = -1 ;
  19. int    quitIconID = -1 ;
  20.  
  21. int quitFuncRet = ILLEGAL_FUNCTION ;
  22.  
  23. int userFunc(apliId, messId, info, data)
  24. int    apliId;
  25. int    messId;
  26. int    info;
  27. int    data;
  28. {
  29.     register int    ret;
  30.  
  31.     ret = ILLEGAL_FUNCTION;
  32.  
  33.     switch(messId)
  34.     {
  35.         case    GM_QUIT :
  36.             MMI_SendMessage(quitIconID,MM_EXEC,2,0,0);
  37.             ret = quitFuncRet ;
  38.             break;
  39.     }
  40.  
  41.     return(ret);
  42. }
  43.  
  44. void main()
  45. {
  46.     static MMICTRL mmi ={
  47.                 SCREEN16|SCREENIGNORE,        // ページ0側解像度
  48.                 SCREENUNUSED,                // ページ1側解像度
  49.                 0,                             // 書き込みページ
  50.                 SCREENAVAILABLE,             // 表示ページ
  51.                 0,                             // 表示プライオリティ
  52.                 SCREENAVAILABLE,            // 色数
  53.                 SCREENEXPAND,                 // VRAMの横の長さ
  54.                 0,                             // メモリ領域の大きさ
  55.                 NULL,                         // メモリ領域のアドレス
  56.                 0,                             // ユーザ領域の大きさ
  57.                 NULL,                         // ユーザ領域のアドレス
  58.                 0, 0,                         // 画面枠    lupx,lupy
  59.                 0, 0,                        //            rdwx,rdwy
  60.                 -16384, -16384,                // 移動枠    lupx,lupy
  61.                 16383, 16383,                //            rdwx,rdwy
  62.                 15,                         // 白色
  63.                 8,                          // 黒色
  64.                 7,                          // 灰色
  65.                 6                             // 反転色
  66.     };
  67.  
  68.     extern int APL_init() ;
  69.  
  70.     /*    初期化処理    */
  71.     if (MMI_Open( &mmi ) == NOERR)
  72.     {
  73.         /*    初期化に成功すればメインループに入る.    */
  74.         if (APL_init() == NOERR)
  75.         {
  76.             MMI_ExecSystem() ;
  77.             ICNTerm();
  78.         }
  79.  
  80.     }
  81.  
  82.     /*    終了処理    */
  83.     MMI_Close() ;
  84.  
  85. }
  86.  
  87. int APL_init()
  88. {
  89.     extern MMIINIT    initDataGUI ;
  90.  
  91.     register int    ret ;
  92.  
  93.     /*    EGB ワークアドレスの取得.    */
  94.     guiEgbPtr = MMI_GetEgbPtr() ;
  95.  
  96.     /*    ユーザアイコン設定        */
  97.     extern unsigned char *iconTbl[];
  98.     extern int iconMaxId;
  99.     MMI_SetIconTable(iconTbl, iconMaxId);
  100.  
  101.     /*    ハイパ型部品の初期化            */
  102.     if ((ret = MMI_initHyper()) < 0)
  103.         return ret ;
  104.     /*    ダイアログ型部品の初期化        */
  105.     if ((ret = MMI_initDialogL40()) < 0)
  106.         return ret ;
  107.     /*    ボタン型部品の初期化            */
  108.     if ((ret = MMI_initButtonL40()) < 0)
  109.         return ret ;
  110.     /*    アイコンボタン型部品の初期化    */
  111.     if ((ret = MMI_initIconL40()) < 0)
  112.         return ret ;
  113.  
  114.     /*    背景データの初期化                        */
  115.  
  116.     /*    データの登録        */
  117.     if ((ret = MMI_Init(&initDataGUI)) < 0)
  118.         return ret ;
  119.  
  120.     //    Tmenuにパレットを合わせる
  121.     KH_initGuiColor();
  122.  
  123.     ICNInit(0);
  124.  
  125.     /*    背景を表示する                            */
  126.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  127.  
  128.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
  129.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"DIGITAL                         By 機拡", 0);
  130.  
  131.     extern void    userIdleTask();
  132.     MMI_SetIdleTaskFunc( userIdleTask );
  133.     userIdleTask();
  134.  
  135.     return NOERR ;
  136. }
  137.  
  138. void userIdleTask(void)
  139. {
  140.     static unsigned int    oldHour = 25;
  141.     static unsigned int    oldMinute = 61;
  142.     static unsigned int    oldSecond = 61;
  143.     static unsigned int    pflag = 0;
  144.     time_t                ct = time(NULL);
  145.     struct tm            *lt = localtime(&ct);
  146.  
  147.     // まだ一秒経っていないなら終了
  148.     if ( lt->tm_sec == oldSecond ){
  149.         return;
  150.     }
  151.     oldSecond = lt->tm_sec;
  152.     pflag = 1 - pflag;
  153.  
  154.     MMI_SendMessage(numberIconID[4],MM_SETSHAPE,1,523+pflag);
  155.     MMI_SendMessage(numberIconID[4],MM_SHOW,0);
  156.  
  157.     // まだ一分経っていないなら終了
  158.     if ( lt->tm_min == oldMinute ){
  159.         return;
  160.     }
  161.     oldMinute = lt->tm_min;
  162.  
  163.     MMI_SendMessage(numberIconID[2],MM_SETSHAPE,1,513+(oldMinute/10));
  164.     MMI_SendMessage(numberIconID[3],MM_SETSHAPE,1,513+(oldMinute%10));
  165.     MMI_SendMessage(numberIconID[2],MM_SHOW,0);
  166.     MMI_SendMessage(numberIconID[3],MM_SHOW,0);
  167.  
  168.     // まだ一時間経っていないなら終了
  169.     if ( lt->tm_hour == oldHour ){
  170.         return;
  171.     }
  172.     oldHour = lt->tm_hour;
  173.  
  174.     MMI_SendMessage(numberIconID[0],MM_SETSHAPE,1,513+(oldHour/10));
  175.     MMI_SendMessage(numberIconID[1],MM_SETSHAPE,1,513+(oldHour%10));
  176.     MMI_SendMessage(numberIconID[0],MM_SHOW,0);
  177.     MMI_SendMessage(numberIconID[1],MM_SHOW,0);
  178.  
  179.     return ;
  180. }
  181.  
  182. /*    initDataGUI:quitIconID:MJ_ICONL40の呼び出し関数    */
  183. int    quitFunc(kobj, messId, argc, pev, trigger)
  184. int        kobj ;
  185. int        messId ;
  186. int        argc ;
  187. EVENT    *pev ;
  188. int        trigger ;
  189. {
  190.     MMI_SetHaltFlag(TRUE);
  191.     quitFuncRet = NOERR ;
  192.  
  193.     return NOERR ;
  194. }
  195.